const express = require('express');
const router = express.Router();
const CartDB = require('../model/sqlite/cart');
const config = require('../common/config');
const util = require('../common/util');
const GoodsDB = require('../model/sqlite/goods');
// 添加购物车信息,测试通过
async function addcart(req, res) {
    try {
        const db = CartDB.getInstance();
        const db_p = GoodsDB.getInstance();
        // 连接数据库
        await db.connect(); 
        await db_p.connect();
        

        // 参数验证
        const requiredFields = ['user_id', 'product_id'];
        const missing = requiredFields.filter(field => !(field in req.body));
        if (missing.length > 0) {
            return res.status(400).json(util.FormatJSONData(400, '缺少必要参数', { missing }));
        }

        const { user_id, product_id } = req.body;
        const info = await db.findByPrimaryKey(user_id, product_id);
        const info_product = await db_p.findById(product_id);
        // 创建商品更新对象
        const now = new Date().toISOString();
        const update_goods = {
                goods_name:info_product.goods_name,
                goods_desc:info_product.goods_desc,
                goods_price:info_product.goods_price,
                goods_detail:info_product.goods_detail,
                goods_stock: info_product.goods_stock - 1,
                goods_id: product_id
            };
        if (!info) {
            // 创建购物车对象
            const cart = {
                user_id,
                product_id,
                add_time: now,
                lastupdate_time: now,
                quantity: 1,
                unit_price: info_product.goods_price,
                money: info_product.goods_price
            };

            // 执行数据库操作
            const result = await db.add(cart);

            if (!result) {
                throw new Error('添加购物车失败11');
            }

            // 更新商品库存
            await db_p.update(update_goods);

            // 检查库存
            const num_product = await db_p.findById(product_id);
            if (num_product.goods_stock < 1) {
                // 可以在这里添加商品下架逻辑
                // await db_p.update({ goods_id: product_id, is_available: false });
            }

            return res.status(201).json(util.FormatJSONData(200, '添加成功', { cart: result }));
        } else {
            console.log('查询购物车结果');
            console.log(info.unit_price);
            // 更新购物车记录
            const cart = {
                user_id,
                product_id,
                lastupdate_time: now,
                quantity: info.quantity + 1,
                money: info.money + info.unit_price
            };
            console.log('cart');
            console.log(cart);
            console.log(info_product);
            // console.log('[强制测试] 查询结果:', JSON.stringify(info_product));
            const result = await db.update(cart);
            console.log('result',result);
            // 更新商品库存
            console.log(update_goods);
            const result02=await db_p.update(update_goods);
            console.log('resuly02',result02);
            if (!result) {
                return res.status(404).json(util.FormatJSONData(404, '购物车记录不存在', result));
            }

            // 这里可以添加库存检查逻辑
            const num_product = await db_p.findById(product_id);
            // if (num_product.goods_stock < 1) {
            //     await db_p.update({ goods_id: product_id, is_available: false });
            // }

            util.log(`购物车信息${user_id}加1成功`);
            return res.status(200).json(util.FormatJSONData(200, '更新购物车记录成功', result));
        }
    } catch (err) {
        util.err('购物车操作失败', err);
        return res.status(500).json(util.FormatJSONData(500, '服务器内部错误'));
    }
}

//购物车商品数减一
function updatecart(req, res){
    (async () => {
        const db = CartDB.getInstance();
        const db_p = GoodsDB.getInstance();
        await db.connect();
        await db_p.connect();
        const info = await db.findByPrimaryKey(req.body.user_id,req.body.product_id);
        const info_product = await db_p.findById(req.body.product_id);
        const update_goods = {
                goods_name:info_product.goods_name,
                goods_desc:info_product.goods_desc,
                goods_price:info_product.goods_price,
                goods_detail:info_product.goods_detail,
                goods_stock: info_product.goods_stock + 1,
                goods_id: req.body.product_id
            };
        if (info.quantity > 1){
            // update 进行减一
            try{
                const cart = {
                    user_id :req.body.user_id, 
                    product_id :req.body.product_id, 
                    lastupdate_time : new Date().toISOString(),  
                    quantity : info.quantity-1,
                    money : info.money-info.unit_price
                }
                //商品数量加一
                await db_p.update(update_goods);
                const result = await db.update(cart);
                if (!result) {
                    res.json(util.FormatJSONData(404, '购物车记录不存在', result));
                } else {
                    res.json(util.FormatJSONData(200, '更新购物车记录成功', result));
                    util.log(`购物车信息减一成功`);
                }
            }catch (err) {
                util.FormatJSONData(res, 500, '服务器内部错误');
            }
        }else if (info.quantity==1){
            //删除这条记录
            try{
                const result = await db.remove(req.body.user_id,req.body.product_id);
                if (!result) {
                    res.json(util.FormatJSONData(404, '删除购物车记录失败', result));
                    
                } else {
                    res.json(util.FormatJSONData(200, '删除购物车记录成功', result));
                    util.log(`购物车信息删除成功`);
                }
            }catch(err) {
                util.FormatJSONData(res, 500, '服务器内部错误');
            }
        }
    })()
}

//删除购物车中用户的一条记录
function removeOne(req,res){
    (async () =>{
        const db = CartDB.getInstance();
        await db.connect();
        try{
            const result = await db.remove(req.body.user_id,req.body.product_id);
            if (!result) {
                res.json(util.FormatJSONData(404, '删除购物车记录失败', result));
                
            } else {
                res.json(util.FormatJSONData(200, '删除购物车记录成功', result));
                util.log(`一条购物车信息删除成功`);
            }
        }catch(err) {
            util.FormatJSONData(res, 500, '服务器内部错误');
        }
    })()
}


//删除购物车中用户的所有记录
function removeall(req,res){
    (async () =>{
        const db = CartDB.getInstance();
        await db.connect();
        try{
            const result = await db.removeall(req.body.user_id);
            if (!result) {
                res.json(util.FormatJSONData(404, '删除购物车记录失败', result));
                
            } else {
                res.json(util.FormatJSONData(200, '删除购物车记录成功', result));
                util.log(`用户购物车信息删除成功`);
            }
        }catch(err) {
            util.FormatJSONData(res, 500, '服务器内部错误');
        }
    })()
}

//通过用户Id查询购物车
function findById(req, res) {
    (async () => {
        try {
            // 参数校验
            const user_Id = req.params.id;
            if (isNaN(user_Id)) {
                return res.status(400).json(util.FormatJSONData(400, '无效的用户ID'));
            }
            const db = CartDB.getInstance();
            await db.connect();
            const cart = await db.findByuser_id(user_Id);
            if (!cart) {
                return res.status(404).json(util.FormatJSONData(404, '用户不存在'));
            }
            res.json(util.FormatJSONData(200, '获取用户成功', cart));
        } catch (err) {
            util.err('查询用户失败');
        }
    })();
}


module.exports={
    addcart,
    updatecart,
    removeOne,
    removeall,
    findById,
}